<?php

Class Minversion extends CI_Model {

    /**
     * Obtiene los atributos de la tabla empresa que tengan acciones disponibles.
     *
     * @return resultado de la query.
     */
    public function obtenerAccionesEmpresa() {
        $this->db->select('*');
        $this->db->from('empresa');
        $this->db->where('accionesDisponibles > 0');
        $resultado = $this->db->get();
        return $resultado->result();
    }

    /**
     * Obtiene los atributos de una empresa.
     *
     * @param int id
     * @return resultado de la query.
     */
    public function obtenerValorEmpresa($id) {
        $this->db->select('id,ticker,valor,accionesDisponibles,max,min,capital,hora');
        $this->db->from('empresa');
        $this->db->where('id = ' . $id);
        $resultado = $this->db->get();
        return $resultado->result();
    }

    /**
     * Obtiene las inversiones del cliente logeado.
     *
     * @param int idCliente
     * @return resultado de la query.
     */
    public function listadoInversiones($idCliente) {
        $this->db->select('accion.id as "idAccion", empresa.id as "idEmpresa", empresa.nombre, empresa.ticker, accion.fecha, accion.valorCompra, accion.cantidad, (accion.cantidad * accion.valorCompra) as "valorTotal", empresa.valor as "valorActual", empresa.hora as "hora"', false);
        $this->db->from('accion, empresa');
        $this->db->where('empresa.id = accion.idEmpresa');
        $this->db->where('accion.idCliente = ' . $idCliente);
        $resultado = $this->db->get();
        return $resultado->result();
    }

    /**
     * Realiza la compra de las acciones, dejándolo reflejado en el histórico e indicando el movimiento y actualizando el saldo.
     *
     * @param array datos[idEmpresa, cantidad, idCliente, idCuenta, valor]
     */
    public function comprarAcciones($datos) {
        $this->db->query("insert into historicoinversion(idEmpresa, cantidad, idCliente, idCuenta, compraVenta, valorCompra, valorVenta)
        values (".$datos['idEmpresa'].",".$datos['cantidad'].",".$datos['idCliente'].",".$datos['idCuenta'].",0,".$datos['valor'].",".$datos['valor'].")");

        $this->db->query('insert into accion(idCliente, cantidad, idEmpresa, valorCompra)
        values('. $datos['idCliente'] . ','. $datos['cantidad'] .','. $datos['idEmpresa'] .',' . $datos['valor'] .')');

        $importe = $datos['cantidad'] * $datos['valor'] * -1;

        $this->db->select('nombre');
        $this->db->from('empresa');
        $this->db->where('id = ' . $datos['idEmpresa']);
        $nombre = $this->db->get();
        $nombre = $nombre->result();

        $this->db->query('insert into movimiento(idCuenta, importe, descripcion, concepto)
        values('. $datos['idCuenta'] .',' . $importe .',"Compra de acciones de ' . $nombre[0]->nombre . '","Inversion")');

        $this->db->query('update empresa set accionesDisponibles = accionesDisponibles - ' . $datos['cantidad'] . ' where id = ' . $datos['idEmpresa']);
    }

    /**
     * Obtiene los valores de una inversion.
     *
     * @param int id
     * @return resultado de la query.
     */
    public function obtenerInversion($id) {
        $this->db->select('accion.id as "idAccion", empresa.id as "idEmpresa", empresa.nombre, empresa.ticker, accion.fecha, accion.valorCompra, accion.cantidad, (accion.cantidad * accion.valorCompra) as "valorTotal", empresa.valor as "valorActual"', false);
        $this->db->from('accion, empresa');
        $this->db->where('empresa.id = accion.idEmpresa');
        $this->db->where('accion.id = ' . $id);
        $resultado = $this->db->get();
        return $resultado->result();
    }

    /**
     * Realiza la venta de acciones, dejándolo reflejado en el histórico y actualizando el saldo de la cuenta,
     * las acciones del cliente y las acciones de la empresa.
     *
     * @param int id
     * @param int cantidad
     * @param int idCuenta
     * @param int idEmpresa
     * @param int idCliente
     * @param int valor
     */
    public function venderAcciones($id, $cantidad, $idCuenta, $idEmpresa, $idCliente, $valor) {
        $this->db->query("insert into historicoinversion(idEmpresa, cantidad, idCliente, idCuenta, compraVenta, valorCompra, valorVenta)
        values (".$idEmpresa.",".$cantidad.",".$idCliente.",".$idCuenta.",1,".$valor.",".$valor.")");
        $this->db->query('update accion set cantidad = (cantidad - ' . $cantidad .') where id = ' . $id);
        $this->db->select("cantidad");
        $this->db->from("accion");
        $this->db->where("id = " . $id);
        $resultado = $this->db->get();
        $this->db->select("nombre");
        $this->db->from("empresa");
        $this->db->where("id = " . $idEmpresa);
        $nombreEmpresa = $this->db->get();
        $nombreEmpresa = $nombreEmpresa->result();
        $this->db->query('insert into movimiento(idCuenta,importe, descripcion, concepto) values (' . $idCuenta .', (select (empresa.valor * '. $cantidad .') from accion, empresa where accion.idEmpresa = empresa.id and accion.id = ' . $id .' ), "Venta de acciones de '. $nombreEmpresa[0]->nombre .'", "Inversión")');
        if (is_numeric($cantidad)){
           $this->db->query('update empresa set accionesDisponibles = accionesDisponibles + '.$cantidad .' where id = ' . $idEmpresa); 
        }
        return $resultado->result();
    }

    /**
     * Borra las acciones del cliente si la cantidad de acciones es 0.
     *
     *
     * @param int  idCantidad
     */
    public function sinAcciones($idCantidad) {
        $this->db->query("delete from accion where id = " . $idCantidad);
    }
}

?>